--功能：获取锁
--传递三个参数：KEYS[1], ARGV[1] ARGV[2]
--KEYS[1] 锁的键
--ARGV[1] 键的值(UUID)
--ARGV[2] 锁超时时间(毫秒)
local ret = redis.call("SETNX", KEYS[1], ARGV[1])
if ret==1 then
    --设置有效期(毫秒)
    redis.call("pexpire", KEYS[1], ARGV[2])
else
    --获取键对应的值
    local v1 = redis.call("GET", KEYS[1])
    --如果值相同则认为是同一线程的请求，则认为是重入锁
    if v1 == ARGV[1] then
        ret = redis.call("pexpire", KEYS[1], ARGV[2])
    end
end
return ret